如果要自己手刻svg標籤來繪圖是非常辛苦的一件事情,D3提供了許多繪製的產生器可以幫助我們省下很多工,再來將挑出幾個做一些基本的說明。
首先用D3來建立svg
var svg = d3.select("body").append("svg")
  .attr("width",400)
  .attr("height",300)
線產生器可以讓我們直接設定<path>標籤的座標,以下準備了一組二維陣列,其中每組陣列為x,y座標
var lines = [[80,80],[200,100],[200,200],[100,200]]
d3.svg.line() 建立線產生器,可以用來當作函式使用。
<path>設定座標是使用”d”屬性,我們直接把前面的座標資料丟給線產生器函式裡就可取得”d”所需的資料。
var linePath = d3.svg.line()
  
svg.append("path")
  .attr("d",linePath(lines))
  .attr("stroke","black")
  .attr("fill","none")
結果如下圖

如果我們用chrome瀏覽器檢視html標籤如下。如果我們要繪製一堆的座標點,就可以省下許多設定svg屬性的力氣,只需要準備好座標資料就可以了。

D3的線產生器還提供了一些其他的方法可以幫助我們做更多的變化。
x()和y()可以自定座標的規則,這裡直接用一組範例程式碼如下:
var lines = [80,120,160,200,240,280,320]
var linePath = d3.svg.line()
    .x(function(d){
      return d
   })
    .y(function(d,i){
      return i % 2 == 0 ? 40 : 120
  })
svg.append("path")
   .attr("d",linePath(lines))
  .attr("stroke","black")
  .attr("fill","none")
結果如下圖

此外還有一個強大的「內插」(Interpolation)模式,可以運算出各種不同的線段繪圖方式;總共有13種模式,這裡只舉其中兩種其他的可參考D3的官方文件。
cardinal 可以用在線圖表,繪製出有弧度的曲線
linePath.interpolate("cardinal”) 

linear-closed 可以線條連到原點閉合起來
linePath.interpolate("linear-closed")

區域產生器用於產生區塊圖型,寫法和前述的線產生器非常類似。最大的差別在於有更多自定座標的方法,有x()、x0()、x1()、y()、y1()、y2()共六個,可選擇使用。
其中x0()和x1()搭配、或者y0()和y1()搭配可定義座標的範圍。
以下是範例程式碼
var dataSet = [80,120,130,70,60,90]
var areaPath = d3.svg.area()
  .x(function(d,i){ return 50 + i * 80})
  .y0(function(d,i){ return height/2 })
  .y1(function(d,i){ return height/2 - d})
  
svg.append("path")
  .attr("d",areaPath(dataSet))
  .attr("stroke","black")
  .attr("fill","blue”)
結果如圖

同樣的,區域產生器也可以使用interpolate()方法。